home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
201
/
201.xpi
/
components
/
contentHandling.js
< prev
next >
Wrap
Text File
|
2010-01-11
|
3KB
|
112 lines
/* You may find the license in the LICENSE file */
function include(uri) {
Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader)
.loadSubScript(uri);
}
include('chrome://dta/content/common/xpcom.jsm');
const NS_ERROR_NO_INTERFACE = Cr.NS_ERROR_NO_INTERFACE;
const NS_ERROR_FAILURE = Cr.NS_ERROR_FAILURE;
const NS_ERROR_NO_AGGREGATION = Cr.NS_ERROR_NO_AGGREGATION;
const NS_ERROR_INVALID_ARG = Cr.NS_ERROR_INVALID_ARG;
const ScriptableInputStream = new Components.Constructor('@mozilla.org/scriptableinputstream;1', 'nsIScriptableInputStream', 'init');
var ContentHandling = {
_init: function() {
var obs = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
obs.addObserver(this, 'http-on-modify-request', true);
},
observe: function(subject, topic, data) {
if (
!(subject instanceof Ci.nsIHttpChannel)
|| !(subject instanceof Ci.nsIUploadChannel)
) {
return;
}
var channel = subject.QueryInterface(Ci.nsIHttpChannel);
if (channel.requestMethod != 'POST') {
return;
}
var post;
try {
var us = subject.QueryInterface(Ci.nsIUploadChannel).uploadStream;
if (!us) {
return;
}
try {
us.QueryInterface(Ci.nsIMultiplexInputStream);
debug("ignoring multiplex stream");
return;
}
catch (ex) {
// no op
}
let ss = us.QueryInterface(Ci.nsISeekableStream);
if (!ss) {
return;
}
let op = ss.tell();
ss.seek(0, 0);
let is = new ScriptableInputStream(us);
// we'll read max 64k
let available = Math.min(is.available(), 1 << 16);
if (available) {
post = is.read(available);
}
ss.seek(0, op);
if (post) {
this._registerData(channel.URI, post);
}
}
catch (ex) {
debug("cannot get post-data", ex);
}
},
_dataDict: {},
_dataArray: [],
_registerData: function(uri, data) {
uri = uri.spec;
if (!(uri in this._dataDict)) {
if (this._dataArray.length > 5) {
delete this._dataDict[this._dataArray.pop()];
}
this._dataArray.push(uri);
}
this._dataDict[uri] = data;
},
getPostDataFor: function(uri) {
if (uri instanceof Ci.nsIURI) {
uri = uri.spec;
}
if (!(uri in this._dataDict)) {
return '';
}
return this._dataDict[uri];
}
};
implementComponent(
ContentHandling,
Components.ID("{47C53284-E2D1-49af-9524-4D42D70D1279}"),
"@downthemall.net/contenthandling;1",
"DownThemAll! Content Handling",
[Ci.nsIObserver, Ci.nsiURIContentListener, Ci.dtaIContentHandling]
);
ContentHandling._init();
// entrypoint
function NSGetModule(compMgr, fileSpec) {
return new ServiceModule(ContentHandling, true);
}